package com.zenithmind.news.pojo.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 新闻VO
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@Schema(description = "新闻VO")
public class NewsVO {

    /**
     * 新闻ID
     */
    @Schema(description = "新闻ID")
    private String id;

    /**
     * 新闻标题
     */
    @Schema(description = "新闻标题")
    private String title;

    /**
     * 新闻摘要
     */
    @Schema(description = "新闻摘要")
    private String summary;

    /**
     * 新闻内容
     */
    @Schema(description = "新闻内容")
    private String content;

    /**
     * 新闻来源
     */
    @Schema(description = "新闻来源")
    private String source;

    /**
     * 新闻来源URL
     */
    @Schema(description = "新闻来源URL")
    private String sourceUrl;

    /**
     * 作者
     */
    @Schema(description = "作者")
    private String author;

    /**
     * 分类ID
     */
    @Schema(description = "分类ID")
    private String categoryId;

    /**
     * 分类名称
     */
    @Schema(description = "分类名称")
    private String categoryName;

    /**
     * 标签列表
     */
    @Schema(description = "标签列表")
    private List<String> tags;

    /**
     * 关键词列表
     */
    @Schema(description = "关键词列表")
    private List<String> keywords;

    /**
     * 封面图片URL
     */
    @Schema(description = "封面图片URL")
    private String coverImage;

    /**
     * 图片列表
     */
    @Schema(description = "图片列表")
    private List<String> images;

    /**
     * 新闻类型（1-原创，2-转载，3-爬虫）
     */
    @Schema(description = "新闻类型（1-原创，2-转载，3-爬虫）")
    private Integer type;

    /**
     * 新闻类型名称
     */
    @Schema(description = "新闻类型名称")
    private String typeName;

    /**
     * 新闻状态（0-草稿，1-已发布，2-已下架，3-审核中，4-审核失败）
     */
    @Schema(description = "新闻状态（0-草稿，1-已发布，2-已下架，3-审核中，4-审核失败）")
    private Integer status;

    /**
     * 新闻状态名称
     */
    @Schema(description = "新闻状态名称")
    private String statusName;

    /**
     * 优先级（1-低，2-中，3-高，4-紧急）
     */
    @Schema(description = "优先级（1-低，2-中，3-高，4-紧急）")
    private Integer priority;

    /**
     * 优先级名称
     */
    @Schema(description = "优先级名称")
    private String priorityName;

    /**
     * 是否置顶（0-否，1-是）
     */
    @Schema(description = "是否置顶（0-否，1-是）")
    private Integer isTop;

    /**
     * 是否热门（0-否，1-是）
     */
    @Schema(description = "是否热门（0-否，1-是）")
    private Integer isHot;

    /**
     * 是否推荐（0-否，1-是）
     */
    @Schema(description = "是否推荐（0-否，1-是）")
    private Integer isRecommend;

    /**
     * 阅读量
     */
    @Schema(description = "阅读量")
    private Long viewCount;

    /**
     * 点赞数
     */
    @Schema(description = "点赞数")
    private Long likeCount;

    /**
     * 收藏数
     */
    @Schema(description = "收藏数")
    private Long favoriteCount;

    /**
     * 分享数
     */
    @Schema(description = "分享数")
    private Long shareCount;

    /**
     * 评论数
     */
    @Schema(description = "评论数")
    private Long commentCount;

    /**
     * 内容质量评分（0-1）
     */
    @Schema(description = "内容质量评分（0-1）")
    private Double qualityScore;

    /**
     * 热度评分
     */
    @Schema(description = "热度评分")
    private Double hotScore;

    /**
     * 发布者ID
     */
    @Schema(description = "发布者ID")
    private String publisherId;

    /**
     * 发布者名称
     */
    @Schema(description = "发布者名称")
    private String publisherName;

    /**
     * 发布时间
     */
    @Schema(description = "发布时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime publishTime;

    /**
     * 原始发布时间（爬虫新闻）
     */
    @Schema(description = "原始发布时间（爬虫新闻）")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime originalPublishTime;

    /**
     * 创建时间
     */
    @Schema(description = "创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @Schema(description = "更新时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;

    /**
     * 相对时间（如：2小时前）
     */
    @Schema(description = "相对时间（如：2小时前）")
    private String relativeTime;

    /**
     * 是否已点赞
     */
    @Schema(description = "是否已点赞")
    private Boolean isLiked;

    /**
     * 是否已收藏
     */
    @Schema(description = "是否已收藏")
    private Boolean isFavorited;

    /**
     * 推荐理由
     */
    @Schema(description = "推荐理由")
    private String recommendReason;
}
